#ifndef _BLUETOOTH_BOARD_H_
#define _BLUETOOTH_BOARD_H_

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <config.h>
#include <stdbool.h>

// 蓝牙广播间隔时间
#define BLUETOOTH_BROADCAST_INTERVAL            (1600ul)
// 蓝牙连接超时时间
#define BLUETOOTH_CONNECTION_TIMEOUT            (60 * 1000)
// 默认蓝牙名称
#define BLUETOOTH_DEFAULT_RADIO_NAME            "OTA_DEVICE"
// 蓝牙 MTU 长度
#define MAX_BLUETOOTH_MTU_SIZE                  (BLE_BUFF_MAX_LEN - 4)

// 报文长度
#define BLUETOOTH_MESSAGE_PACKET_LENGTH         (NOMINAL_PACKET_LENGTH)

/**
 * @brief 蓝牙接收数据堆栈
 *
 */
typedef struct
{
  uint16_t DataSize;                                 // 数据长度
  uint16_t LengthOfTransmit;                         // 已发送数据长度
  uint8_t DataBuff[BLUETOOTH_MESSAGE_PACKET_LENGTH]; // 数据
} BluetoothDataBuff_t;

/**
 * @brief 获取蓝牙 MAC 地址
 *
 * @param pMacOut - MAC 编码
 */
extern void BluetoothGetMacAddress(uint8_t *pMacOut);

/**
 * @brief 获取设备类型
 *
 * @return uint8_t - 设备类型
 */
extern uint8_t BluetoothGetDeviceType(void);

/**
 * @brief 获取设备状态
 *
 * @return bool - 设备状态
 */
extern uint8_t BluetoothGetSystemStatus(void);

/**
 * @brief 获取蓝牙广播名称
 * 
 * @param pNameOut - 蓝牙广播名称
 */
extern void BluetoothGetRadioName(void *pNameOut);

/**
 * @brief 获取协议栈版本号
 *
 * @return uint8_t - 协议栈版本号
 */
extern uint8_t BluetoothGetProtocolVersion(void);

/**
 * @brief 获取蓝牙连接超时时间
 *
 * @return uint16_t - 连接超时时间
 */
extern uint16_t BluetoothGetConnectTimeout(void);

/**
 * @brief 获取蓝牙广播间隔
 *
 * @return uint16_t - 蓝牙广播间隔
 */
extern uint16_t BluetoothGetBroadcastInterval(void);

/**
 * @brief 解析蓝牙推送报文
 *
 * @param pMessage - 数据报文
 */
extern void BluetoothAnalysisServerPushMessage(const void *pMessage);

#endif
